package sicnu.cs.ich.user.service;



import sicnu.cs.ich.api.domain.entity.Validate;

import javax.servlet.http.HttpServletRequest;

/**
 * @author 沈洋 邮箱:1845973183@qq.com
 * @create 2021/10/31-20:25
 **/
public interface IValidateService {

    /**
     * 发送插值密码的邮件
     *
     * @param request 请求
     * @param email   邮件
     * @param token   验证码
     */
    void sendPasswordResetEmail(HttpServletRequest request, String email, String token);

    /**
     * 在pm_validate表中插入一条validate记录，userid，
     * email属性来自pm_user表，token由UUID生成
     *
     * @param validate 邮箱验证实体
     * @return 变动行数
     */
    int insertNewResetRecord(Validate validate);

    /**
     * pm_validate表中，通过token查找重置申请记录
     *
     * @param resetToken token
     * @return 邮箱校验集合
     */
    Validate findUserByResetToken(String resetToken);

    /**
     * 验证连接是否失效：链接有两种情况失效 1.超时 2.最近请求的一次链接自动覆盖之前的链接（待看代码）
     *
     * @param email         邮箱
     * @param requestPerDay 每日申请次数
     * @param interval      间隔时间
     * @param token         token
     * @return 是否失效
     */
    boolean validateLimitation(String email, long requestPerDay, long interval, String token);

    /**
     * 验证是否发送重置邮件：每个email的重置密码每日请求上限为requestPerDay次，与上一次的请求时间间隔为interval分钟。
     *
     * @param email         邮箱
     * @param requestPerDay 每日请求上线
     * @param interval      间隔时间分钟
     * @return 是否发送
     */
    boolean sendValidateLimitation(String email, long requestPerDay, long interval);

}
